package modele.epoque;

import java.util.ArrayList;
import modele.epoque.ex.EpoqueInexistante;
import modele.pion.Pion;

/**
 * Représente un époque contenant les pions que le joueur peut posséder en ayant
 * choisi cette époque
 *
 * @author dodelien
 */
public abstract class Epoque {

	/**
	 * Contient la Classe des différents pions de cette époque
	 */
	protected ArrayList<Class> typePions;
	/**
	 * Le pion le moins cher de cette époque
	 */
	protected Pion pionMoinsCher;

	/**
	 *
	 */
	public Epoque() {
	}

	/**
	 *
	 * @param nom le nom de l'époque que l'on souhaite créer
	 * @return Une nouvelle instance de l'époque ayant comme nom 'nom'
	 * @throws EpoqueInexistante
	 */
	public static Epoque getEpoqueNom(String nom) throws EpoqueInexistante {
		if (nom.equals("Medieval")) {
			return new Medieval();
		} else if (nom.equals("Present")) {
			return new Present();
		} else if (nom.equals("Futur")) {
			return new Futur();
		} else {
			throw new EpoqueInexistante();
		}
	}

	/**
	 *
	 * @return typePions, la Classe des pions de cette époque
	 */
	public ArrayList<Class> getTypePions() {
		return typePions;
	}

	/**
	 * Defini 'pionMoinsCher' le Pion le moins cher de cette époque
	 */
	protected void definirPionMoinsCher() {
		pionMoinsCher = Pion.getTypePion(typePions.get(0));
		for (Class cPion : typePions) {
			if (Pion.getTypePion(cPion).getPrix() < pionMoinsCher.getPrix()) {
				pionMoinsCher = Pion.getTypePion(cPion);
			}
		}
	}

	/**
	 *
	 * @return le Pion le moins cher de l'époque
	 */
	public Pion getPionMoinsCher() {
		return pionMoinsCher;
	}

	@Override
	public abstract String toString();
}
